package ecole.organisation;

import config.Config;
import ecole.utilisateur.Professeur;

/**
 * Classe défininissant les enseignement suivi dans une formation
 * 
 * @author Salah Bennour
 */
public class Enseignement implements java.io.Serializable {

	private static final long serialVersionUID = 2L;
	private String nomEnseignement, descriptif;
	private int coef;
	private final static int coefMax = Config.MAX_COEF;
	private Professeur respEnseignement;

	// ***************CONSTRUCTEUR*************************
	public Enseignement(String nomEnseignement, Professeur prof,
			String descriptif, int coef) {
		this.nomEnseignement = nomEnseignement.toUpperCase();
		this.respEnseignement = prof;
		this.descriptif = descriptif;
		this.coef = coef;
	}

	// ***************METHODES*************************

	/**
	 *Methode permettant de verifier qu'un coefficient d'un enseignment est
	 * bien compris entre 0 et 6.
	 * 
	 * @param coef
	 *            est le coefficient de l'enseignement que l'on souhaite
	 *            attribuer.
	 * @return boolean : true si le coefficient est compris en 0 et 6. False
	 *         sinon.
	 */
	public boolean verifierCoef(int coef) {
		if ((coef > 0) && (coef <= coefMax)) { // si 0<coef<=6
			this.coef = coef;
			return true;
		}
		return false;
	}

	// ***************GETTER*************************
	/**
	 *Methode permettant de retourner le nom d'un enseignement(ex: IPA,
	 * MAM,..).
	 * 
	 * @return String : le nom de l'enseignement.
	 */
	public String getNomEnseignement() {
		return nomEnseignement;
	}

	/**
	 *Methode permettant de retourner le descriptif d'un enseigenemnt.
	 * 
	 * @return String : le descriptif de l'enseignement (ex: Introduction à la
	 *         Programmation Avancée).
	 */
	public String getDescriptif() {
		return descriptif;
	}

	/**
	 *Methode permettant de retourner le coefficient d'un enseignement.
	 * 
	 * @return int : le coef de l'enseignement.
	 */
	public int getCoef() {
		return coef;
	}

	/**
	 *Methode permettant de retourner le professeur responsable d'un
	 * enseignement.
	 * 
	 * @return Professeur : l'instance professeur responsable de l'enseignement.
	 */
	public Professeur getRespEnseignement() {
		return respEnseignement;
	}

	// ***************SETTER*************************
	/**
	 *Methode permettant de modifier le nom d'un enseignement.
	 * 
	 * @param nomEnseignement
	 *            : est le nouveau nom de l'enseignement.
	 */
	public void setNomEnseignement(String nomEnseignement) {
		this.nomEnseignement = nomEnseignement;
	}

	/**
	 *Methode permettant de modifier le professeur responsable de
	 * l'enseignement.
	 * 
	 * @param respEnseignement
	 *            : est le nouveau resposable de l'enseignement
	 */
	public void setRespEnseignement(Professeur respEnseignement) {
		this.respEnseignement = respEnseignement;
	}

	/**
	 *Methode permettant de modifier le descriptif d'un enseignement.
	 * 
	 * @param descriptif
	 *            : est le nouveau descriptif de l'enseignement.
	 */
	public void setDescriptif(String descriptif) {
		this.descriptif = descriptif;
	}

	/**
	 *Methode permettant de modifier le coefficient d'un enseignement.
	 * 
	 * @param descriptif
	 *            : est le nouveau coefficient de l'enseignement.
	 */
	public void setCoef(int coef) {
		this.coef = coef;
	}

	public String print() {
		return getNomEnseignement() + "#" + this.getRespEnseignement().getNom()
				+ "#" + this.getRespEnseignement().getPrenom() + "#"
				+ getDescriptif() + "#" + getCoef();
	}

	// ***************TO STRING*************************
	public String toString() {
		return "\n \t Nom : " + getNomEnseignement() + "\n \t Responsable : "
				+ this.getRespEnseignement().getNom() + " "
				+ this.getRespEnseignement().getPrenom()
				+ "\n \t Descriptif : " + getDescriptif()
				+ "\n \t Coefficient : " + getCoef() + " ECTS \n";
	}

}
